CupertinoTabBar には Localization の親が必要です
まとめ
のインスタンスCupertinoTabBar
を持っている必要がありますLocalizations
ローカライズされたものを提供するための親Semantics
ヒント。をインスタンス化しようとしていますCupertinoTabBar
ローカリゼーションなし
結果は次のようなアサーションになります。
CupertinoTabBar requires a Localizations parent in order to provide an appropriate Semantics hint
for tab indexing. A CupertinoApp provides the DefaultCupertinoLocalizations, or you can
instantiate your own Localizations.
'package:flutter/src/cupertino/bottom_tab_bar.dart':
Failed assertion: line 213 pos 7: 'localizations != null'
コンテクスト
ローカライズされたセマンティクス情報をサポートするには、
のCupertinoTabBar
ローカライズが必要です。
この変更が行われる前は、Semantics
ヒントが提供されました
にCupertinoTabBar
ハードコーディングされた文字列でした。
「タブ、$total の $index」。セマンティクスの内容
ヒントもこのオリジナルから更新されました
英語の「Tab $index of $total」への文字列。
もしあなたのCupertinoTabBar
範囲内です
のCupertinoApp
、DefaultCupertinoLocalizations
すでにインスタンス化されており、あなたのニーズに適しているかもしれません
既存のコードを変更することなく、必要な情報を得ることができます。
もしあなたのCupertinoTabBar
以内ではありませんCupertinoApp
、
のローカライズを提供できます
を使用して選択しますLocalizations
ウィジェット。
移行ガイド
表示されている場合は、'localizations != null'
アサーションエラー、
ロケール情報が存在することを確認してください
あなたに提供されるCupertinoTabBar
。
移行前のコード:
import 'package:flutter/cupertino.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MediaQuery(
data: const MediaQueryData(),
child: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled),
label: 'Tab 1',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled_solid),
label: 'Tab 2',
),
],
currentIndex: 1,
),
);
}
}
移行後のコード (CupertinoApp
):
import 'package:flutter/cupertino.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoApp(
home: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled),
label: 'Tab 1',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled_solid),
label: 'Tab 2',
),
],
currentIndex: 1,
),
);
}
}
移行後のコード (次を使用してローカリゼーションを提供する)
のLocalizations
ウィジェット):
import 'package:flutter/cupertino.dart';
void main() => runApp(Foo());
class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Localizations(
locale: const Locale('en', 'US'),
delegates: <LocalizationsDelegate<dynamic>>[
DefaultWidgetsLocalizations.delegate,
DefaultCupertinoLocalizations.delegate,
],
child: MediaQuery(
data: const MediaQueryData(),
child: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled),
label: 'Tab 1',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.add_circled_solid),
label: 'Tab 2',
),
],
currentIndex: 1,
),
),
);
}
}
タイムライン
リリースされたバージョン: 1.18.0-9.0.pre
安定版リリース: 1.20.0
参考文献
API ドキュメント:
CupertinoTabBar
Localizations
DefaultCupertinoLocalizations
Semantics
CupertinoApp
- Flutter アプリの国際化
関連する PR:
- PR 55336: CupertinoLocalizations への tabSemanticsLabel の追加
- PR 56582:クパチーノのタブ セマンティクスをマテリアルと同じになるように更新する